Complex web pages are often assembled dynamically at a client by having the client fetch multiple resources from multiple endpoints. This results in high latencies, increased network data consumption, and sometimes frustrating and disjointed page rendering experiences. While some existing systems offer the delivery of pre-packaged content by combining multiple resources to reduce downloads from the endpoints in a package, these systems rely on static packaging which has several downsides. For example, static packages often lead to “over push” conditions where the client either has to download a package that contains some resources that are already present with the client, or has to fetch additional resources from origin sites. In both of these examples, the client has to download additional network data.
Further, at least because each client has different configurations and states, there is no one optimal static package for every client. For example, static packages may differ according to the type of resources in the web page, time (e.g., include resources that changed recently in one package and resources that have not changed recently in another package), the size of the resources (e.g., group the smaller resources together in one package), and the like. As such, any given static package may benefit some clients for some web pages, but does not benefit other clients for other web page.